const path = require('path');
const chalk = require('chalk');
const base = require('./src/base.config');
const apiConfig = require('./src/api.config');

const PUBLICPATH_PROD = base.production_prod;
const PUBLICPATH_TEST = base.production_test;
const PUBLICPATH_DEV = base.development;

let MY_ENV = process.env.MY_ENV;
let MY_MOCK = process.env.MY_MOCK;

// build环境
const IS_PROD = process.env.NODE_ENV === 'production';
// build且test环境
const IS_PROD_TEST = IS_PROD && MY_ENV === 'test';
// build且prod环境
const IS_PROD_PROD = IS_PROD && MY_ENV === 'prod';

console.log(chalk.yellow(`  当前环境：${MY_ENV}\n`));

console.log(
  chalk.yellow(`  当前服务域名(掘金)：${apiConfig(MY_ENV, 'master')}\n`)
);
console.log(
  chalk.yellow(`  当前服务域名(简书)：${apiConfig(MY_ENV, 'jianshu')}\n`)
);
console.log(
  chalk.yellow(`  当前服务域名(思否)：${apiConfig(MY_ENV, 'sifou')}\n`)
);

console.log(
  chalk.yellow(`  当前服务域名(node)：${apiConfig(MY_ENV, 'node')}\n`)
);

const resolve = dir => {
  return path.join(__dirname, dir);
};
const proxy = IS_PROD
  ? null
  : {
      '/master': {
        target: apiConfig(MY_ENV, 'master'),
        secure: true,
        changeOrigin: true,
        // 代理的时候路径是有 master 的，因为这样子就可以针对代理，不会代理到其他无用的。但实际请求的接口是不需要 master 的，所以在请求前要把它去掉
        pathRewrite: {
          '^/master': ''
        },
        onProxyReq(proxyReq) {
          if (proxyReq.getHeader('origin')) {
            proxyReq.setHeader('origin', 'https://api.juejin.cn');
          }
        }
      },

      '/jianshu': {
        target: apiConfig(MY_ENV, 'jianshu'),
        secure: true,
        changeOrigin: true,
        pathRewrite: {
          '^/jianshu': ''
        },
        onProxyReq(proxyReq) {
          proxyReq.setHeader('Accept', '*/*');
        }
      },
      '/sifou': {
        target: apiConfig(MY_ENV, 'sifou'),
        secure: true,
        changeOrigin: true,
        pathRewrite: {
          '^/sifou': ''
        }
        // onProxyReq: proxyReq => {
        //   if (proxyReq.getHeader('origin')) {
        //     proxyReq.setHeader('origin', 'https://api.juejin.cn');
        //   }
        // }
      }
    };
module.exports = {
  // 基本路径
  publicPath: IS_PROD_TEST
    ? PUBLICPATH_TEST
    : IS_PROD_PROD
    ? PUBLICPATH_PROD
    : PUBLICPATH_DEV,
  // eslint-loader 是否在保存的时候检查
  lintOnSave: true,
  // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
  assetsDir: '',
  // 生产环境是否生成 sourceMap 文件，一般情况不建议打开
  productionSourceMap: false,

  css: {
    loaderOptions: {
      less: {
        lessOptions: {
          modifyVars: {
            hack: `true; @import "${resolve('./src/assets/css/theme.less')}";`
          },
          javascriptEnabled: true
        }
      }
    }
  },
  chainWebpack: config => {
    // 图片小于10kb转换base64
    config.module
      .rule('images')
      .use('url-loader')
      .loader('url-loader')
      .tap(options => Object.assign(options, { limit: 10240 }))
      .end();

    config
      .plugin('define')
      .tap(args => {
        Object.assign(args[0]['process.env'], {
          MY_ENV: JSON.stringify(MY_ENV),
          MY_MOCK: JSON.stringify(MY_MOCK)
        });
        console.log(
          chalk.yellow(
            `\n\n CUARRENAT-ENV-ARGS：\n\n ${JSON.stringify(args, null, 2)}\n`
          )
        );
        return args;
      })
      .end();

    if (process.env.NODE_ENV === 'production') {
      if (process.env.npm_config_report) {
        config
          .plugin('webpack-bundle-analyzer')
          .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
          .end();
      }
    } else {
    }
  },
  configureWebpack: config => {
    // 生产环境插件
    // const prodPlugins = [];
    // 开发环境插件
    // const devPlugins = [];

    // 生产环境
    if (
      process.env.NODE_ENV === 'production' &&
      process.env.MY_ENV !== 'test'
    ) {
      Object.assign(
        config.optimization.minimizer[0].options.terserOptions.compress,
        {
          warnings: false,
          drop_debugger: true,
          drop_console: true
        }
      );
      // config.plugins = [...config.plugins, ...prodPlugins];
    } else {
      // config.plugins = [...config.plugins, ...devPlugins];
    }
  },
  pluginOptions: {},
  devServer: {
    disableHostCheck: true,
    proxy
  }
};
